//
//  NetRequest.h
//  DDKelai
//
//  Created by Admin on 16/1/6.
//  Copyright (c) 2016年 chenwenhao. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NetRequest : NSObject
{
    AFHTTPSessionManager *_manager;
}

/**
 @brief 单例
 @discussion 获取该类单例进行操作
 @return 返回类实例
 */
+ (NetRequest*)sharedInstance;

/**
 @brief 单例
 @discussion 获取该类单例进行操作
 @param baseURL 网络请求的基础URL
 @return 返回类实例
 */
+ (NetRequest*)sharedInstanceWithBaseURL:(NSString *)baseURL;


/**
 @brief 初始化网络请求
 @param baseURL 网络请求的基础URL
 */
- (id)initNetRequestWithBaseURL:(NSString *)baseURL;


/**
 @brief 通过post方式请求数据
 @param urlScheme 请求数据的接口
 @param paramsDict 请求参数的NSDictionary
 @param interfaceVersion 接口版本号
 @param contentType 接口版本号
 @param success 请求数据成功的回调block
 @param fail 请求数据失败的回调block
 */
- (NSURLSessionDataTask *)postDataFromURLScheme:(NSString *)urlScheme
                               paramsDictionary:(id)paramsDict
                               interfaceVersion:(NSString *)interfaceVersion
                                    contentType:(NSString *)contentType
                                        success:(void (^)(id data, BOOL isSuccess, RequestError *msg))success
                                           fail:(void (^)(RequestError *errMsg))fail;

/**
 @brief 通过post方式请求数据
 @param urlScheme 请求数据的接口
 @param paramsDict 请求参数的NSDictionary
 @param interfaceVersion 接口版本号
 @param success 请求数据成功的回调block
 @param fail 请求数据失败的回调block
 */
- (NSURLSessionDataTask *)postDataFromURLScheme:(NSString *)urlScheme
             paramsDictionary:(id)paramsDict
             interfaceVersion:(NSString *)interfaceVersion
                      success:(void (^)(id data, BOOL isSuccess, RequestError *msg))success
                         fail:(void (^)(RequestError *errMsg))fail;

/*
 @brief 通过post方式请求数据
 @param urlScheme 请求数据的接口
 @param paramsDict 请求参数的NSDictionary
 @param success 请求数据成功的回调block
 @param fail 请求数据失败的回调block
 */
- (NSURLSessionDataTask *)postDataFromURLScheme:(NSString *)urlScheme
             paramsDictionary:(id)paramsDict
                      success:(void (^)(id data, BOOL isSuccess, RequestError *msg))success
                         fail:(void (^)(RequestError *errMsg))fail;

/*
 @brief 通过get方式请求数据
 @param urlScheme 请求数据的接口
 @param paramsDict 请求参数的NSDictionary
 @param success 请求数据成功的回调block
 @param fail 请求数据失败的回调block
 */
- (NSURLSessionDataTask *)getDataFromURLScheme:(NSString *)urlScheme
            paramsDictionary:(id)paramsDict
                     success:(void (^)(id data, BOOL isSuccess, RequestError *msg))success
                        fail:(void (^)(RequestError *errMsg))fail;


/**
 *   通过get方法获取数据
 *
 *  @param urlScheme        请求数据的接口
 *  @param paramsDict       请求参数的NSDictionary
 *  @param interfaceVersion 接口版本号
 *  @param success          请求数据成功的回调block
 *  @param fail             请求数据失败的回调block
 *
 *  @return <#return value description#>
 */
- (NSURLSessionDataTask *)getDataFromURLScheme:(NSString *)urlScheme
                               paramsDictionary:(id)paramsDict
                               interfaceVersion:(NSString *)interfaceVersion
                                        success:(void (^)(id data, BOOL isSuccess, RequestError *msg))success
                                           fail:(void (^)(RequestError *errMsg))fail;


/**
 @brief 通过get方式请求数据
 @param urlScheme 请求数据的接口
 @param paramsDict 请求参数的NSDictionary
 @param interfaceVersion 接口版本号
 @param contentType 接口版本号
 @param success 请求数据成功的回调block
 @param fail 请求数据失败的回调block
 */
- (NSURLSessionDataTask *)getDataFromURLScheme:(NSString *)urlScheme
                              paramsDictionary:(id)paramsDict
                              interfaceVersion:(NSString *)interfaceVersion
                                   contentType:(NSString *)contentType
                                       success:(void (^)(id data, BOOL isSuccess, RequestError *msg))success
                                          fail:(void (^)(RequestError *errMsg))fail;


/*
 @brief 下载文件、图片、视频
 @param urlScheme 请求数据的接口
 @param paramsDict 请求参数的NSDictionary
 @param success 请求数据成功的回调block
 @param fail 请求数据失败的回调block
 */
- (NSURLSessionDownloadTask *)downLoadFromURLScheme:(NSString *)urlScheme
                                   paramsDictionary:(id)paramsDict
                                            success:(void (^)(id data, BOOL isSuccess, RequestError *msg))success
                                               fail:(void (^)(RequestError *errMsg))fail;

/**
 @brief 取消http请求
 */
- (void)cancelRequest;

/**
 @brief 设置http response 响应信息
 @param rawData 直接接收服务端返回格式数据
 */
- (void)setHttpResponse:(BOOL)rawData;


/**
 @brief 设置http请求超时时间
 @param timeout 超时时间（单位：秒）
 */
- (void)setHttpRequestTimeout:(double)timeout;


/**
 @brief 增加http请求头部信息类型
 @param rawData 直接接收服务端返回格式数据
 @param contentType 请求数据类型
 @param params 请求参数
 */
- (void)addHttpRequestHeader:(NSString *)contentType rawData:(BOOL)rawData params:(id)params;

@end
